package fr.asip.cps3.exemple.vues.ecrans.saisie;

import java.awt.Color;
import java.awt.GridBagLayout;

import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JPanel;
import javax.swing.JScrollPane;
import javax.swing.JTextArea;
import javax.swing.JTextField;
import javax.swing.ScrollPaneConstants;
import javax.swing.border.EmptyBorder;

import fr.asip.cps3.exemple.modele.objets.Objet;
import fr.asip.cps3.exemple.vues.FenetrePrincipale;
import fr.asip.cps3.exemple.vues.composants.GridBagHelper;
import fr.asip.cps3.exemple.vues.ecrans.EcranUtil;

/**
 * Classe permettant de modéliser l'écran de saisie d'un Objet
 */
public class SaisieObjet extends Saisie {

	/**
	 * Identifiant de l'objet (uniquement renseigné en cas de modification d'attribut)  
	 */
	protected long idObjet = -1;	
	
	/**
	 * Libellé pour le libellé de l'objet 
	 */
	protected JLabel libelleObjet;	

	/**
	 * Texte du libellé de l'objet 
	 */
	protected JTextField texteLibelleObjet;	
	
	/**
	 * Libellé pour les données de l'objet 
	 */
	protected JLabel libelleObjetDonnees;
	
	/**
	 * Texte Objet
	 */
	protected JTextArea texteObjet;
	
	/**
	 * Ascenseur de l'Objet
	 */
	protected JScrollPane scrollObjet;
	
	/**
	 * Constructeur
	 * @param fenetre La fenêtre qui doit contenir l'écran de saisie
	 * @param typeEcran Type d'écran
	 */
	public SaisieObjet(FenetrePrincipale fenetre, int typeEcran) {

		this(fenetre, typeEcran, null);
		
	}

	/**
	 * Constructeur
	 * @param fenetre La fenêtre qui doit contenir l'écran de saisie
	 * @param typeEcran Type d'écran
	 * @param objet Objet permettant de pré-remplir les champs
	 */
	public SaisieObjet(FenetrePrincipale fenetre, int typeEcran, Objet objet) {

		super(fenetre,typeEcran);

		if(typeEcran == EcranUtil.TYPE_ECRAN_CREATION_OBJETS) {
			libelleObjet = new JLabel("Entrez un libellé pour l'objet :");
			libelleObjetDonnees = new JLabel("Entrez l'objet sous forme héxadécimale :");
			texteLibelleObjet = new JTextField();
			texteObjet = new JTextArea();
		} else if(typeEcran == EcranUtil.TYPE_ECRAN_MODIFICATION_OBJETS) {
			libelleObjet = new JLabel("Libellé de l'objet :");
			libelleObjetDonnees = new JLabel("Modifier la valeur de l'objet (sous forme héxadécimale) :");
			if(objet != null) {
				idObjet = objet.getIdObjet();
				if(objet.getLibelle() != null)
					texteLibelleObjet = new JTextField(objet.getLibelle());
				if(objet.getValeur() != null)
					texteObjet = new JTextArea(objet.getValeur());				
			}
			texteLibelleObjet.setEditable(false);
		}
		
		texteObjet.setLineWrap(true);
		texteObjet.setWrapStyleWord(true);	
		scrollObjet = new JScrollPane(texteObjet,ScrollPaneConstants.VERTICAL_SCROLLBAR_AS_NEEDED,ScrollPaneConstants.HORIZONTAL_SCROLLBAR_AS_NEEDED);
		scrollObjet.setBackground(Color.white);
    	
	}	

	/**
     * Accesseur
     * @return Identifiant de l'objet
     */
	public long getIdObjet() {
		return idObjet;
	}	
	
	/**
     * Renvoie les données de l'objet
     * @return Données de l'objet
     */
	public String getObjet() {
		return texteObjet.getText();
	}

	/**
     * Renvoie le libellé de l'objet
     * @return Libellé de l'objet
     */
	public String getLibelleObjet() {
		return texteLibelleObjet.getText();
	}	
	
	/**
	 * Affiche les champs d'entrée
	 * @param fenetre La fenêtre qui doit contenir l'écran d'entrée
	 */
    public void affiche() {

    	JFrame fenetre = this.fenetre.getFenetre();
    	
    	if(fenetre != null && fenetre.getContentPane() != null) {
    	
	    	EcranUtil.supprimeTousLesComposants(((JPanel)fenetre.getContentPane()));
	    	
	        // Création du layout
	    	((JPanel)fenetre.getContentPane()).setBorder(new EmptyBorder(0, 0, 0, 0));
	        GridBagLayout layout = new GridBagLayout();
	        ((JPanel)fenetre.getContentPane()).setLayout(layout);
	        
	        // Ajout des composants
	        GridBagHelper g = new GridBagHelper(fenetre.getContentPane());
	        // Ligne 0
	        g.ajoute(libelleObjet, EcranUtil.styleLibelleSaisieObjet, 0, 0, 1, 1);
	        g.ajoute(texteLibelleObjet, EcranUtil.styleChampTexteLibelleObjet, 0, 1, 1, 1);
	        // Ligne 1
	        g.ajoute(libelleObjetDonnees, EcranUtil.styleLibelleSaisieObjet, 1, 0, 1, 1);
	        g.ajoute(scrollObjet, EcranUtil.styleScrollSaisieObjet, 1, 1, 1, 1);
	        // Ligne 2
	        g.ajoute(soumettre, EcranUtil.styleBoutonSoumettre, 2, 0, 1, 2);
	        // Ligne 3
	        g.ajoute(barreStatut, EcranUtil.styleBarreStatut, 3, 0, 1, 2);
	        
    	}
    }
}
